package com.woniu.carrent.util;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.woniu.carrent.controller.CarTpyeController;
import com.woniu.carrent.mapper.TCarbindMapper;
import com.woniu.carrent.mapper.TCartypeMapper;
import com.woniu.carrent.pojo.TCar;
import com.woniu.carrent.pojo.dto.TCarDto;
import com.woniu.carrent.service.TCarService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class BookingTools {
    private static final Logger logger = LoggerFactory.getLogger(BookingTools.class);

    @Autowired
    private TCarService carService;
    @Autowired
    private TCartypeMapper tCartypeMapper;
    @Autowired
    private TCarbindMapper tCarbindMapper;

    /**
     * 查询车辆工具方法
     * @param carType 车辆类型
     * @param brand 车辆品牌
     * @param minPrice 最低价格
     * @param maxPrice 最高价格
     * @return 符合条件的车辆列表
     */
    @Tool(name = "search_cars",description = "根据条件查询车辆信息")
    public List<TCar> searchCars(@ToolParam(description = "车辆类型",required = true) String carType,
                                 String brand, Double minPrice, Double maxPrice) {
        logger.info("AI工具调用：查询车辆信息，类型：{}，品牌：{}，价格区间：{}-{}", carType, brand, minPrice, maxPrice);
        try {
            // 参数验证
            if (carType == null && brand == null && minPrice == null && maxPrice == null) {
                logger.warn("没有提供有效的查询条件");
                return List.of(); // 返回空列表
            }

            // 创建分页对象（这里使用默认分页）
            Page<TCar> page = new Page<>(1, 5); // 默认查询第一页，每页100条记录

            // 构造查询条件对象
            TCarDto tcarDto = new TCarDto();
            if (carType != null && !carType.isEmpty()) {
                Integer typeId = tCartypeMapper.getIdBytype(carType);
                if (typeId != null) {
                    tcarDto.setCtypeid(typeId);
                }
            }
            if (brand != null && !brand.isEmpty()) {
                Integer brandId = tCarbindMapper.getIdBybind(brand);
                if (brandId != null) {
                    tcarDto.setBrandid(brandId);
                }
            }

            // 处理价格范围
            if(minPrice != null){
                tcarDto.setMinPrice(minPrice);
            }
            if(maxPrice != null){
                tcarDto.setMaxPrice(maxPrice);
            }
            // 调用服务层方法进行查询
            List<TCar> cars = carService.selectCars(page, tcarDto);

            return cars;

        }
        catch (Exception e) {
            logger.error("查询车辆信息失败：{}", e.getMessage());
            return List.of(); // 抛出异常，返回空列表
        }
    }


    /**
     * 预订车辆工具方法
     * @param carId 车辆ID
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 预订结果
     */
    @Tool(description = "预订车辆")
    public String bookCar(Long carId, String startDate, String endDate) {
        logger.info("AI工具调用：预订车辆，车辆ID：{}，时间：{}至{}", carId, startDate, endDate);

        // 实现预订逻辑
        // 示例实现：
        // return carService.bookCar(carId, startDate, endDate);

        return "预订成功"; // 需要替换为实际实现
    }
}
